home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / btrees2.arc / BTPARM.C < prev    next >
Encoding:
C/C++ Source or Header  |  1984-12-14  |  1.8 KB  |  66 lines

  1. /*    btparm        */
  2. #include <stdio.h>
  3. #include <btextern.h>
  4.  
  5. /*  gets parameters stored at INTINT, INTCHAR, INTKEY    */
  6.  
  7. int btparm ()
  8. {
  9.     int    *ip, i;
  10.     char    *cp;
  11.     struct    {
  12.         int cs, ss, ds, es;
  13.         } segreg, *segregp;
  14.  
  15.     int fromoff,    /* from offset */
  16.         fromseg,    /* from segment */
  17.        *tooff,    /* to offset */
  18.         toseg;    /* to segment */
  19.  
  20. /*    get function code at INTINT    */
  21. gfcode=peek(peek(INTINT,0),peek(INTINT+sizeof(int),0));
  22. switch     (gfcode)    {
  23. case 1 :             /* file create and open */
  24. case 2 : segread(&segreg);    /* get registers */
  25.     fromoff = peek(INTCHAR,0);    /* offset of file name */
  26.     fromseg = peek(INTCHAR + sizeof(int),0);/*seg of filname*/
  27.     tooff = gfilnam;    /* offset of to filename */
  28.     toseg = segreg.ds;    /* data segment of global */
  29.     movblock(fromoff,fromseg,tooff,toseg,LFILNAM + 1);
  30. /* now file name has been moved    */
  31.  
  32. /* now move keylength    */
  33. fromoff = peek(INTINT,0) + sizeof(int);
  34. gkeylen = peek(fromoff,peek(INTINT + sizeof(int),0));
  35. break;
  36.  
  37. case 3:        /* close a file */
  38. case 4:        /* insert a key */
  39. case 5:        /* random read  */
  40. segread (&segreg);    /* get registers */
  41. fromoff = peek (INTINT, 0) + sizeof (int);
  42. gkeylen = peek(fromoff, peek (INTINT + sizeof (int), 0));
  43. fromoff = peek (INTINT, 0) + 2 * sizeof (int);
  44. gfilhand = peek (fromoff, peek (INTINT + sizeof (int), 0));
  45. fromoff = peek (INTINT, 0) + 4 * sizeof (int);
  46. gdatapt = peek (fromoff, peek (INTINT + sizeof (int), 0));
  47.  
  48. /*    now get new key value    */
  49. fromoff = peek (INTKEY, 0);
  50. fromseg = peek (INTKEY + sizeof (int), 0);
  51. tooff = gfilkey;
  52. toseg = segreg.ds;
  53. movblock (fromoff, fromseg, tooff, toseg, LKEYLEN + 1);
  54.  
  55. break;
  56.  
  57. default:        /* baaaaad function code man ! */
  58.     gfcode = 0;
  59.     BTSETCOD (NULL, NULL, 10);    /* bad function code */
  60.     break;
  61. }    
  62. /* end of switch */
  63. return (0);            /* no problem */
  64. }
  65. /* end of btparm */
  66.